草庐IT

c++ - 迁移到 c++11

全部标签

c++ - 如何在不调用实现定义的行为的情况下将二进制数据写入文件?

我正在编写这样的程序,将一些字节写入文件。#includeintmain(){charbuffer[4]={0,0,255,255};std::ofstreamf("foo.txt",std::ios_base::binary);f.write(buffer,sizeofbuffer);f.close();return0;}这工作正常,并在我的系统上给出了预期的结果。$g++-std=c++11-pedantic-Wall-Wextrasignedness.cc$./a.out$catfoo.txt$od-tx1foo.txt00000000000ffff0000004等效的C代码是:

C++11:std ref 全局变量和非函数局部 thread_local 初始化顺序?

C++11中具有非平凡构造函数的全局变量是在静态初始化阶段在进入main之前构造的。同样,非函数局部thread_local变量是在每个线程的“thread_local初始化阶段”构建的。C++11标准是否规定了这些变量的构造顺序?在这两种情况下,如果有两个变量://globalscopeA::A(){b.f();}//AconstructorusesglobalbAa;Bb;C++11标准是否指定了它们应按什么顺序进行初始化,或者如果使用未初始化的变量应该产生错误?同样适用于非函数本地thread_local://globalscopeA::A(){b.f();}//Aconstru

Win11环境下 Unity个人版无法激活

网上教程大多都是在win10环境下运行,win11环境下遇到很多没有碰到的问题,故简单做个记录,也方便同样使用win11的朋友解决问题。Unity2021无法打开问题描述:下载Unity2021.3.4f1c1版本(LTS)后,桌面快捷方式无法打开。打开任务管理器后发现,点击Unity快捷方式后Unity进程出现,几秒后Unity进程自动消失,系统表现为无反应。可能原因:猜测是由于Unity新版本和win11冲突或其他系统原因导致解决方案:回滚到早期版本,下载了2020.3.36f1c1和2018.4.18f1的LTS版本,均可以正常使用,没有出现相同问题。

c++ - 分配两个数组一次调用 cudaMalloc

内存分配是GPU中最耗时的操作之一,因此我想通过使用以下代码调用一次cudaMalloc来分配2个数组:intnumElements=50000;size_tsize=numElements*sizeof(float);//declarations-initializationsfloat*d_M=NULL;err=cudaMalloc((void**)&d_M,2*size);//errorchecking//AllocatethedeviceinputvectorAfloat*d_A=d_M;//AllocatethedeviceinputvectorBfloat*d_B=d_M+

c++ - 使用数组作为元组成员 : Valid C++11 tuple declaration?

下面的代码可以在G++4.7.2中正常编译:#includestd::tuplex;但是,使用clang++3.2会产生以下错误:错误:数组初始化器必须是一个初始化器列表。如果我从元组声明中删除float类型,错误就会消失。上面的元组声明是否有效?($CXX-std=c++11-c文件.cpp) 最佳答案 我认为标准中没有任何内容禁止您的声明。但是,一旦尝试初始化、复制、移动或分配元组,就会遇到问题,因为对于这些操作,元组的所有成员类型都必须能够用作初始化器、可复制构造、可复制分配和移动分配,分别(§20.4.2.1)。这些都不是数

C++ 11为什么在返回临时对象之前调用移动构造函数

我正在学习C++11,我不明白为什么在下面的代码中classX{std::vectordata;public://Constructor1X():data(100000)//lotsofdata{}//Constructor2X(Xconst&other)://copyconstructordata(other.data)//duplicateallthatdata{}//Constructor3X(X&&other)://moveconstructordata(std::move(other.data))//movethedata:nocopies{}X&operator=(Xcon

c++ - 访问共享内存进行读取时锁定

如果我以只读方式访问共享内存,以检查if()block的条件,我是否仍应锁定互斥体?例如mutex_lock();if(var/*sharedmemory*/){}mutex_unlock();是否需要在此处锁定以及良好做法? 最佳答案 如果您正在读取的变量可以并发写入,那么是的,您应该获取互斥锁。如果您的编译器为您提供必要的原语,您只能原子地读取它;这可能是C11和C++11附带的原子功能,也可能是您的编译器提供的其他语言扩展。然后您可以将互斥量获取移到条件中,但是如果您等到测试之后才获取互斥量,那么其他人可能会在您测试它和获取互

c++ - 确定乘法输出是否适合 64 位的最大值

这个问题在这里已经有了答案:HowdoIdetectunsignedintegeroverflow?(31个答案)关闭9年前。我有一条乘法线,可以产生大于64位值的输出。(最大我可以持有)。我想确定确定输出是否大于64位的最佳方法。我试过一些类似的东西。uint64_tval1,val2,val3;if((val1*val2*val3)>UINT64_MAX){//warningmessage}else{//dosomething}变量被初始化为一些值。

超过 "tuple"的 C++11 范围

我正在尝试使用C++11功能实现哈希类。我没有重复使用STL的哈希,因为这是一项学校作业。我正在尝试这样做:for(auto&h:{H1[hash_func(n1,val)],H2[hash_func(n2,val)]}){for(auto&x:h){if(x==val){swap(x,h.back());h.pop_back();}}}H1和H2类型为vector*.当我尝试编译它时,我遇到了一个我什至无法理解的讨厌的语法错误。如果我尝试for(auto&h:{H1,H2})并使用h[hash_func(n1,val)]而不是h,它有效(尽管它显然是错误的)。我怎样才能解决这个问题?

java - 在 Java 中按引用传递与按值传递

这个问题在这里已经有了答案:IsJava"pass-by-reference"or"pass-by-value"?(92个回答)关闭9年前。我来自C/C++世界。我在许多帖子中注意到,人们不接受这样的说法:在Java中存在“通过引用传递”(针对非基元);他们的论点是,在这种情况下,引用的拷贝被拿走了。我无法理解这种理由,因为这实际上是我们通过引用传递时在C中发生的情况(获取指针的拷贝)。对于我对Java的一点了解,我会说:基本类型按值传递。非基本类型通过引用传递。我错了吗?